Amazon Fraud Detectorが本日GAになりました!
昨年(2019年)のre:Inventでプレビュー版として発表されたAmazon Fraud Detectorが本日から晴れて一般利用できるようになりました!!
概要は上記のブログに書かれていますが簡単に説明すると、オンラインのカード不正利用や偽アカウントなどの詐欺行為を機械学習モデルを使って検出できるマネージドサービスです。
早速試してみたいと思います!
試してみた
なお、東京リージョンではまだ使えないので今日はバージニアリージョンで試します。
- 不正を評価するイベントを定義
- 履歴イベントデータセットをAmazon S3にアップロードし、不正検出モデルタイプを選択
- 履歴データを使用してカスタムモデルを構築する。 アルゴリズムを選択し、モデルをトレーニングして調整、モデルをホストする
- モデルの予測に基づいて、情報の受け入れ、確認、または収集するためのルールを作成
- Amazon Fraud Detector APIを呼び出して、リアルタイムの不正予測を受信し、構成された検出ルールに基づいてアクションを実行
Amazon Fraud Detectorでは、不正検出モデルをアップロードして検出のルールを作成することで利用することができます。
今回はコンソールからモデルの作成までをやってみたいと思います。
トレーニングデータを用意
公式から提供されているサンプルデータを使います。
こちらの Training_Data.zip
をダウンロードしてください。
サンプルにはminimumとfullの2つのcsvファイルがありますが今回はminimumの方を使います。
モデルを作成する前にS3にアップロードしてある必要があるので先に用意しておきます。
ここでは以下の場所にアップロードしました。
パス: s3://sample-fraud-detector-model/training/registration_data_20K_minimum.csv
ステップ1: イベントを作成
- イベント名:
sample_registration
- エンティティ名:
sample_customer
イベント名を入力してEntitiyプロパティでCreate new entity
を選択し、エンティティ名を入力します。
Event variables
Select variables from a training dataset
を選択してください。
ここでIAMロールを作成し、先程のS3バケットへのアクセス権限を付与します。
先程のバケット名のみを入力してください。
次にData locationに先程アップロードしたトレーニングデータのパスを入力してください。 アップロードすると、変数のマッピングができるようになるのでip_addressとemail_addressをそれぞれマッピングします。
Labels
次にLabelを追加します。
- fraud
- legit
作成したイベントはこちらです。
ステップ2: モデルを作成
Fraud DetectorではFraud Detector上で作成したモデルか、SageMakerのモデルのどちらかを使うことができます。
ここではFraud Detector上で作成していきます。
左のペインからModels
に移動し、Add your first model
を選択します。
- モデル名: sample_fraud_detection_model
- イベントタイプ: sample_registration(上で作成したイベント)
Create a train model
でモデルの作成を開始します。
この作業には40分ほどかかります。
ステータスがTrainingからReady to deployに変わるとチャートが表示されました。
モデルをデプロイ
左上のActionsからモデルをデプロイします。
デプロイにも少し時間がかかります。
デプロイが終わるとステータスがActiveに変わります。
ステップ4: 検出ロジックを作成
モデルがデプロイできたら検出ロジックを設定するためDetectorを作成します。 実際に検出するためのデータの閾値などを設定していきます。
左ペインからDetectorsを開きCreate Detector
を選択します。
Detector名: sample_detector
上記で作成したイベントとデプロイしたモデルを選択します。
ルールの定義
レベル毎に3つのルールを定義します。
- high_fraud_risk
- medium_fraud_risk
- low_fraud_risk
ルール名、定義(Expression)に$sample_fraud_detection_model_insightscore > 900
を入力したら、出力を決めます。
OutcomesでCreate a new outcome
を選択し、verify_customer
を作成します。
定義の変数部分は${モデル名_insightscore}
としてください。
項目を追加したら1つ目のルールをAdd rule
で追加します。
左下のAdd another rule
→Create rule
から次のルールを設定していきます。
それぞれのルール定義は以下になります。
high_fraud_risk
$sample_fraud_detection_model_insightscore > 900
medium_fraud_risk
$sample_fraud_detection_model_insightscore <= 900 and $sample_fraud_detection_model_insightscore > 700
low_fraud_risk
$sample_fraud_detection_model_insightscore <= 700
Outcomesはそれぞれ、verify_customer
review
approve
としています。
次の画面でルールの実行を設定できます。
デフォルトのFIRST_MATCHED
の場合はルールのOrder順に評価され最初に一致したルールの結果を返します。
ALL_MATCHED
の場合は一致したすべての結果を返します。
バージョンのPublish
Detectorを作成したままだと、ステータスがDraftとなっています。 左上のActionsからPublishしてください。
不正行為を評価
ここまできたらアプリケーションから不正行為を評価することができます。
以下はboto3でGetEventPrediction API
を使って不正行為を評価するサンプルとなります。
import boto3 fraudDetector = boto3.client('frauddetector') fraudDetector.get_event_prediction( detectorId = 'sample_detector', eventId = '802454d3-f7d8-482d-97e8-c4b6db9a0428', eventTypeName = 'sample_registration', eventTimestamp = '2020-07-13T23:18:21Z', entities = [{'entityType':'sample_customer', 'entityId':'12345'}], eventVariables = { 'email_address' : '[email protected]', 'ip_address' : '1.2.3.4' } )
コンソールでのテスト
また、Detectorのバージョン内の概要タブからテストを実行することもできます。
不正行為が検出されなかった場合
- ip_address:
152.58.247.12
- email_address:
[email protected]
結果はlow_fraud_riskでapproveと表示されています。
不正行為が検出された場合
- ip_address:205.251.233.178
- email_address:[email protected]
想定どおり、high_fraud_riskで設定したverify_customerが出力されました。
まとめ
以上、GetEventPrediction API
を使って不正行為を検出する公式デモを試してみました。
GetEventPredictionをアプリケーションのサインアップ処理や決済処理に挟むことで不正行為かどうかの判定を手伝うことができます。
一点注意点として、Amazon Fraud Detectorで不正行為を検出するには過去のイベントデータが必須です。
サンプルデータでは2万件のイベントデータが含まれていて、最小は1万件でデータが多ければ多いほど精度が上がります。
イベントデータさえあればコンソールから簡単にモデルを作成して不正行為の検出をすることができました。
今後もアップデートを追っていきたいと思います!